<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
	<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
	<title>LOOP: Release Notes</title>
	<style type="text/css" media="all"><!--
		@import "../loop.css";
		@import "../layout1.css";
	--></style>
</head>

<body>

<div id="Header">Class Models for Lua</div>
<div id="Logo"><img alt="small (1K)" src="../small.gif" height="70"></div>

<div id="Menu">
<div class="outside"><div class="inside"><ul>
	<li><a href="../index.html", title="">Home</a></li>
	<li><a href="index.html", title="Installation">Install</a>
		<div class="outside"><div class="inside"><ul>
			<li><strong>Changes</strong></li>
			<li><a href="previous.html", title="Previous Releases">Previous</a></li>
			<li><a href="preload.html", title="Pre-Loading Script Libraries">Preload</a></li>
		</ul></div></div>
	</li>
	<li><a href="../manual/index.html", title="User Manual">Manual</a></li>
	<li><a href="../library/index.html", title="Class Library">Library</a></li>
	<li><a href="../contact.html", title="Contact People">Contact</a></li>
	<li><a href="http://luaforge.net/projects/oil/", title="Project at LuaForge">LuaForge</a></li>
</ul></div></div>

</div>

<div class="content">
<h1>Release Notes</h1>

<h2>Version 2.3 beta</h2>

<h3>Class Models</h3>
<dl>
	<dt>All Models</dt>
	<dd>New operation <code>memberof(class, name)</code> that gets the value of a member defined by a class;</dd>
</dl>

<h3>Class Library</h3>
<dl>
	<dt><strong>New Classes</strong></dt>
	<dd>
		<ul>
			<li><code>loop.collection.UnorderedArraySet</code></li>
			<li><code>loop.compiler.Arguments</code></li>
			<li><code>loop.object.Publisher</code></li>
		</ul>
	</dd>
	<dt><strong><code>loop.collection.MapWithArrayOfKeys</code></strong></dt>
	<dd>
		<ul>
			<li>Bugfix when mapping key values to <code>false</code>;</li>
		</ul>
	</dd>
	<dt><strong><code>loop.collection.OrderedSet</code></strong></dt>
	<dd>
		<ul>
			<li>Bugfixes to deal with <code>nil</code> parameters and <code>false</code> elements properly;</li>
		</ul>
	</dd>
	<dt><strong><code>loop.debug.Inspector</code></strong></dt>
	<dd>
		<ul>
			<li>Improvement to support commands <code>step</code>, <code>step "in"</code> and <code>step "out"</code>;</li>
			<li>Improvement to support definition of break points;</li>
			<li>Improvement to support command <code>lua</code> to retrieve values from the Lua global environment, i.e. _G;</li>
		</ul>
	</dd>
	<dt><strong><code>loop.debug.Matcher</code></strong></dt>
	<dd>
		<ul>
			<li>Improvement to hold the values being compared at indexes 0 (second parameter) and 1 (first parameter) to be able to provide better error messages;</li>
		</ul>
	</dd>
	<dt><strong><code>loop.debug.Verbose</code></strong></dt>
	<dd>
		<ul>
			<li>Bugfix when default inspection (self.inspect = true) was used;</li>
			<li>Bugfix to use a specific Viewer instance to avoid changing the behavior of the class <code>loop.debug.Viewer</code>;</li>
		</ul>
	</dd>
	<dt><strong><code>loop.object.Exception</code></strong></dt>
	<dd>
		<ul>
			<li>Bugfix to allow subclasses to work with the inherited <code>__concat</code> metamethod;</li>
		</ul>
	</dd>
	<dt><strong><code>loop.serial.FileStreamer</code></strong></dt>
	<dd>
		<ul>
			<li>Bugfix when multiple values were serialized into a file using different <code>put</code> calls;</li>
		</ul>
	</dd>
	<dt><strong><code>loop.serial.Serializer</code></strong></dt>
	<dd>
		<ul>
			<li>Bugfix for proper serialization of global non-serializable functions;</li>
			<li>Bugfix to show a proper error message when attempting to serialize a userdata without custom serialization metamethod;</li>
			<li>Bugfix so all fields of loaded packages that have unique values (i.e. tables, functions, threads or userdata) are serialized as package fields instead of ordinary serializable values;</li>
			<li>Improvement so serialized code generated by redefined serialization functions for specific Lua types does not have to follow any protocol anymore.
			However, to avoid future serialization of the same value the a value retrieval code must be registered in the serializer using the serialized value as key;</li>
		</ul>
	</dd>
	<dt><strong><code>loop.thread.CoSocket</code></strong></dt>
	<dd>
		<ul>
			<li>Bugfix when operation <code>send</code> yielded due to a full buffer;</li>
			<li>Bugfix in <code>select</code> to prevent wrong socket selection;</li>
			<li>Bugfix in <code>select</code> when executed without yielding and returned sockets instead of socket wrappers;</li>
			<li>Improvement by use of package <code>socket.core</code> instead of <code>socket</code> package;</li>
			<li>Improvement by addition of <code>cosocket</code> verbose tag as a new level of verbose in <code>loop.thread.Scheduler</code> verbose;</li>
		</ul>
	</dd>
	<dt><strong><code>loop.thread.IOScheduler</code></strong></dt>
	<dd>
		<ul>
			<li>Bugfix to prevent duplicated verbose message already printed by the super class.;</li>
		</ul>
	</dd>
	<dt><strong><code>loop.thread.Scheduler</code></strong></dt>
	<dd>
		<ul>
			<li>Bugfix in <code>remove(coroutine)</code> when coroutine == self.currentkey;</li>
			<li>Bugfix in constructor that created instances that shared data structures used by the class. The new constructor also allows objects that already are instance of the class to be constructed again perserving its state;</li>
			<li>Bugfix when coroutine-safe pcall executed C functions;</li>
			<li>Improvement in <code>remove(coroutine)</code> to return the removed coroutine plus the time it should wake up if it was suspended;</li>
			<li>Improvement by addition of method <code>halt()</code> that stops the scheduling performed by method <code>run()</code>;</li>
		</ul>
	</dd>
	<dt><strong><code>loop.thread.Timer</code></strong></dt>
	<dd>
		<ul>
			<li>Bugfix that prevents the timer thread to end after first execution;</li>
			<li>Bugfix when timer was disabled;</li>
		</ul>
	</dd>
</dl>

<h3>General Utilities</h3>
<dl>
	<dt><strong><code>loop.table</code></strong></dt>
	<dd>
		<ul>
			<li>Bugfix in function <code>clear(table)</code> when table contained a <code>false</code> key;</li>
			<li>Improvement in function <code>copy(table [, destiny])</code> that now performs a raw copy, i.e. using <code>rawset</code>;</li>
		</ul>
	</dd>
	<dt><strong><code>precompiler.lua</code></strong> and <strong><code>preloader.lua</code></strong></dt>
	<dd>
		<ul>
			<li>These scripts now support new command-line options but their current implementation require class <code>loop.compiler.Arguments</code> to handle these options properly (see instructions <a href="preload.html">here</a>);</li>
		</ul>
	</dd>
</dl>

</div>

<div class="content">
<p><small><strong>Copyright (C) 2004-2008 Tecgraf, PUC-Rio</strong></small></p>
<small>This project is currently being maintained by <a href="http://www.tecgraf.puc-rio.br">Tecgraf</a> at <a href="http://www.puc-rio.br">PUC-Rio</a>.</small>
</div>



</body>

</html>
